home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / Apps / SoundApps / aa_Intel_Only / EnvelopeEd1.04b / Source / MKEnvelopes.ma < prev    next >
Encoding:
Text File  |  1993-04-02  |  40.4 KB  |  1,643 lines

  1. (*^
  2.  
  3. ::[paletteColors = 128; 
  4.     fontset = title, "Times-Bold", 24, L2, center, bold, nohscroll;
  5.     fontset = subtitle, "Times-Bold", 18, L2, center, bold, nohscroll;
  6.     fontset = subsubtitle, "Times-Bold", 14, L2, center, bold, nohscroll;
  7.     fontset = section, "Times-Bold", 18, L2, bold, nohscroll, grayBox;
  8.     fontset = subsection, "Times-Bold", 14, L2, bold, nohscroll, blackBox;
  9.     fontset = subsubsection, "Times-Bold", 12, L2, bold, nohscroll, whiteBox;
  10.     fontset = text, "Times-Roman", 12, L2, nohscroll;
  11.     fontset = smalltext, "Times-Roman", 10, L2, nohscroll;
  12.     fontset = input, "Courier-Bold", 12, L2, bold, nowordwrap;
  13.     fontset = output, "Courier", 12, L2, nowordwrap;
  14.     fontset = message, "Courier", 12, L2, R21845, G21845, B21845, nowordwrap;
  15.     fontset = print, "Courier", 12, L2, nowordwrap;
  16.     fontset = info, "Courier", 12, L2, nowordwrap;
  17.     fontset = postscript, "Courier", 12, L2, nowordwrap;
  18.     fontset = name, "Times-Italic", 11, L2, italic, R21845, G21845, B21845, nowordwrap, nohscroll;
  19.     fontset = header, "Times", 10, L2;
  20.     fontset = footer, "Times", 12, L2, center;
  21.     fontset = help, "Times-Roman", 14, L2, nohscroll;
  22.     fontset = clipboard, "New York", 12, L2;
  23.     fontset = completions, "Courier", 16, L2, nowordwrap;
  24.     fontset = network, "Courier", 10, L2, nowordwrap;
  25.     fontset = graphlabel, "Courier", 12, L2, nowordwrap;
  26.     fontset = special1, "New York", 12, L2, nowordwrap;
  27.     fontset = special2, "New York", 12, L2, center, nowordwrap;
  28.     fontset = special3, "New York", 12, L2, right, nowordwrap;
  29.     fontset = special4, "New York", 12, L2, nowordwrap;
  30.     fontset = special5, "New York", 12, L2, nowordwrap;]
  31. :[font = title; inactive; ]
  32. The Smoothing Parameter
  33. in Music Kit Envelopes
  34. :[font = subsubtitle; inactive; ]
  35. by Julius O. Smith
  36. :[font = text; inactive; center; ]
  37. NeXT Inc.
  38. July 11, 1991
  39. :[font = section; inactive; startGroup; ]
  40. Introduction
  41. :[font = subsection; inactive; startGroup; ]
  42. Definition of an Envelope
  43. :[font = text; inactive; endGroup; ]
  44. A Music Kit "envelope" is a function of time specified by a list of "breakpoints".  Each "breakpoint" is specified by two or three numbers.  In the two-number case, you specify the time of the breakpoint and desired value of the envelope at that point.    The envelope itself is a piecewise exponential function.  The desired value at each breakpoint is approached exponentially from the previous breakpoint.  Exponential functions are discussed below.
  45.  
  46. :[font = subsection; inactive; startGroup; ]
  47. Definition of the Envelope Smoothing Parameter
  48. :[font = text; inactive; ]
  49. The optional third parameter in a breakpoint specification is called "smoothness".  It controls the relaxation time-constant used in approaching each "target value" in the envelope.  The actual definition is the following:
  50. :[font = subsubtitle; inactive; ]
  51. Smoothness is defined as the number of repetitions of the time interval to the next breakpoint needed to reach that breakpoint's value.  
  52. :[font = text; inactive; endGroup; endGroup; ]
  53. Thus, the most natural choice of smoothness S is S=1.  This means the envelope will just about reach the next envelope breakpoint value at the time specified for that breakpoint.  Setting S=0 means the envelope will instantly jump to the next breakpoint.  Setting S=2 means the envelope will about reach the next breakpoint value at two times the distance to the next breakpoint; this is "smoother" than S=1.  It also means that using values of S larger than 1 means setting breakpoint target values which are larger (when going up) than you actually expect to reach.  In fact, if there were no maximum number limit on the DSP, you could take S to infinity and get a piecewise linear envelope.
  54. :[font = section; inactive; startGroup; ]
  55. Exponential Envelopes
  56. :[font = subsection; inactive; startGroup; ]
  57. The Exponential Decay
  58. :[font = text; inactive; ]
  59. First lets look at an exponential decay.  This is like the end of an envelope when it is decaying to zero.
  60. :[font = input; ]
  61. Clear[f1,A,tau,t];      (* Clear any previous definitions *)
  62. f1[t_] := A Exp[-t/tau];  (* tau = exponential time constant *)
  63. :[font = text; inactive; ]
  64. For t>0, f1[t] is the function used for the final decay of every envelope, where A is the value of the envelope when the decay starts  (nominally the value of the last nonzero breakpoint)..
  65. :[font = subsubsection; inactive; startGroup; ]
  66. Example Plots
  67. :[font = input; startGroup; ]
  68. A = 1;            (* A = amplitude (units arbitrary) *)
  69. tau = 3;        (* time constant = 3 seconds *)
  70. Plot[f1[t],{t,0,tau},
  71.     PlotRange->{0,A},
  72.     AxesLabel->{"time(sec)",""},
  73.     PlotLabel->"Decay by factor 1/e"];
  74. :[font = postscript; inactive; PostScript; output; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  75. %!
  76. %%Creator: Mathematica
  77. %%AspectRatio: 0.61803 
  78. MathPictureStart
  79. % Scaling calculations
  80. 0.02381 0.31746 0 0.61803 [
  81. [(Decay by factor 1/e)] 0.5 0.62428 0 -1 Msboxa
  82. [(0.5)] 0.18254 -0.0125 0 1 Msboxa
  83. [(1)] 0.34127 -0.0125 0 1 Msboxa
  84. [(1.5)] 0.5 -0.0125 0 1 Msboxa
  85. [(2)] 0.65873 -0.0125 0 1 Msboxa
  86. [(2.5)] 0.81746 -0.0125 0 1 Msboxa
  87. [(3)] 0.97619 -0.0125 0 1 Msboxa
  88. [(time\(sec\))] 1.00625 0 -1 0 Msboxa
  89. [(0.2)] 0.01131 0.12361 1 0 Msboxa
  90. [(0.4)] 0.01131 0.24721 1 0 Msboxa
  91. [(0.6)] 0.01131 0.37082 1 0 Msboxa
  92. [(0.8)] 0.01131 0.49443 1 0 Msboxa
  93. [(1)] 0.01131 0.61803 1 0 Msboxa
  94. [()] 0.02381 0.62428 0 -1 Msboxa
  95. [ -0.001 -0.00725 0 0 ]
  96. [ 1.001 0.61903 0 0 ]
  97. ] MathScale
  98. % Start of Graphics
  99. 1 setlinecap
  100. 1 setlinejoin
  101. newpath
  102. %%Object: Graphics
  103. [ ] 0 setdash
  104. 0 setgray
  105. 0 setgray
  106. [(Decay by factor 1/e)] 0.5 0.62428 0 -1 Mshowa
  107. gsave
  108. gsave
  109. 0.002 setlinewidth
  110. 0 0 moveto
  111. 1 0 lineto
  112. stroke
  113. 0.18254 -0.00625 moveto
  114. 0.18254 0.00625 lineto
  115. stroke
  116. 0 setgray
  117. [(0.5)] 0.18254 -0.0125 0 1 Mshowa
  118. 0.34127 -0.00625 moveto
  119. 0.34127 0.00625 lineto
  120. stroke
  121. 0 setgray
  122. [(1)] 0.34127 -0.0125 0 1 Mshowa
  123. 0.5 -0.00625 moveto
  124. 0.5 0.00625 lineto
  125. stroke
  126. 0 setgray
  127. [(1.5)] 0.5 -0.0125 0 1 Mshowa
  128. 0.65873 -0.00625 moveto
  129. 0.65873 0.00625 lineto
  130. stroke
  131. 0 setgray
  132. [(2)] 0.65873 -0.0125 0 1 Mshowa
  133. 0.81746 -0.00625 moveto
  134. 0.81746 0.00625 lineto
  135. stroke
  136. 0 setgray
  137. [(2.5)] 0.81746 -0.0125 0 1 Mshowa
  138. 0.97619 -0.00625 moveto
  139. 0.97619 0.00625 lineto
  140. stroke
  141. 0 setgray
  142. [(3)] 0.97619 -0.0125 0 1 Mshowa
  143. 0 setgray
  144. [(time\(sec\))] 1.00625 0 -1 0 Mshowa
  145. 0.02381 0 moveto
  146. 0.02381 0.61803 lineto
  147. stroke
  148. 0.01756 0.12361 moveto
  149. 0.03006 0.12361 lineto
  150. stroke
  151. 0 setgray
  152. [(0.2)] 0.01131 0.12361 1 0 Mshowa
  153. 0.01756 0.24721 moveto
  154. 0.03006 0.24721 lineto
  155. stroke
  156. 0 setgray
  157. [(0.4)] 0.01131 0.24721 1 0 Mshowa
  158. 0.01756 0.37082 moveto
  159. 0.03006 0.37082 lineto
  160. stroke
  161. 0 setgray
  162. [(0.6)] 0.01131 0.37082 1 0 Mshowa
  163. 0.01756 0.49443 moveto
  164. 0.03006 0.49443 lineto
  165. stroke
  166. 0 setgray
  167. [(0.8)] 0.01131 0.49443 1 0 Mshowa
  168. 0.01756 0.61803 moveto
  169. 0.03006 0.61803 lineto
  170. stroke
  171. 0 setgray
  172. [(1)] 0.01131 0.61803 1 0 Mshowa
  173. 0 setgray
  174. [()] 0.02381 0.62428 0 -1 Mshowa
  175. grestore
  176. grestore
  177. 0 0 moveto
  178. 1 0 lineto
  179. 1 0.618034 lineto
  180. 0 0.618034 lineto
  181. closepath
  182. clip
  183. newpath
  184. 0 setgray
  185. gsave
  186. gsave
  187. 0.004 setlinewidth
  188. 0.02381 0.61803 moveto
  189. 0.06349 0.59281 lineto
  190. 0.10317 0.56862 lineto
  191. 0.14286 0.54541 lineto
  192. 0.18254 0.52315 lineto
  193. 0.22222 0.5018 lineto
  194. 0.2619 0.48133 lineto
  195. 0.30159 0.46168 lineto
  196. 0.34127 0.44284 lineto
  197. 0.38095 0.42477 lineto
  198. 0.42063 0.40743 lineto
  199. 0.46032 0.39081 lineto
  200. 0.5 0.37486 lineto
  201. 0.53968 0.35956 lineto
  202. 0.57937 0.34488 lineto
  203. 0.61905 0.33081 lineto
  204. 0.65873 0.31731 lineto
  205. 0.69841 0.30436 lineto
  206. 0.7381 0.29194 lineto
  207. 0.77778 0.28002 lineto
  208. 0.81746 0.2686 lineto
  209. 0.85714 0.25763 lineto
  210. 0.89683 0.24712 lineto
  211. 0.93651 0.23704 lineto
  212. 0.97619 0.22736 lineto
  213. stroke
  214. grestore
  215. grestore
  216. % End of Graphics
  217. MathPictureEnd
  218. :[font = text; inactive; ]
  219. It takes several time constants to decay really close to zero:
  220. :[font = input; startGroup; ]
  221. Plot[f1[t],{t,0,3*tau},
  222.     PlotRange->{0,A},
  223.     AxesLabel->{"time(sec)",""},
  224.     PlotLabel->"Decay by 3 time constants"];
  225. :[font = postscript; inactive; PostScript; output; endGroup; endGroup; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  226. %!
  227. %%Creator: Mathematica
  228. %%AspectRatio: 0.61803 
  229. MathPictureStart
  230. % Scaling calculations
  231. 0.02381 0.10582 0 0.61803 [
  232. [(Decay by 3 time constants)] 0.5 0.62428 0 -1 Msboxa
  233. [(2)] 0.23545 -0.0125 0 1 Msboxa
  234. [(4)] 0.44709 -0.0125 0 1 Msboxa
  235. [(6)] 0.65873 -0.0125 0 1 Msboxa
  236. [(8)] 0.87037 -0.0125 0 1 Msboxa
  237. [(time\(sec\))] 1.00625 0 -1 0 Msboxa
  238. [(0.2)] 0.01131 0.12361 1 0 Msboxa
  239. [(0.4)] 0.01131 0.24721 1 0 Msboxa
  240. [(0.6)] 0.01131 0.37082 1 0 Msboxa
  241. [(0.8)] 0.01131 0.49443 1 0 Msboxa
  242. [(1)] 0.01131 0.61803 1 0 Msboxa
  243. [()] 0.02381 0.62428 0 -1 Msboxa
  244. [ -0.001 -0.00725 0 0 ]
  245. [ 1.001 0.61903 0 0 ]
  246. ] MathScale
  247. % Start of Graphics
  248. 1 setlinecap
  249. 1 setlinejoin
  250. newpath
  251. %%Object: Graphics
  252. [ ] 0 setdash
  253. 0 setgray
  254. 0 setgray
  255. [(Decay by 3 time constants)] 0.5 0.62428 0 -1 Mshowa
  256. gsave
  257. gsave
  258. 0.002 setlinewidth
  259. 0 0 moveto
  260. 1 0 lineto
  261. stroke
  262. 0.23545 -0.00625 moveto
  263. 0.23545 0.00625 lineto
  264. stroke
  265. 0 setgray
  266. [(2)] 0.23545 -0.0125 0 1 Mshowa
  267. 0.44709 -0.00625 moveto
  268. 0.44709 0.00625 lineto
  269. stroke
  270. 0 setgray
  271. [(4)] 0.44709 -0.0125 0 1 Mshowa
  272. 0.65873 -0.00625 moveto
  273. 0.65873 0.00625 lineto
  274. stroke
  275. 0 setgray
  276. [(6)] 0.65873 -0.0125 0 1 Mshowa
  277. 0.87037 -0.00625 moveto
  278. 0.87037 0.00625 lineto
  279. stroke
  280. 0 setgray
  281. [(8)] 0.87037 -0.0125 0 1 Mshowa
  282. 0 setgray
  283. [(time\(sec\))] 1.00625 0 -1 0 Mshowa
  284. 0.02381 0 moveto
  285. 0.02381 0.61803 lineto
  286. stroke
  287. 0.01756 0.12361 moveto
  288. 0.03006 0.12361 lineto
  289. stroke
  290. 0 setgray
  291. [(0.2)] 0.01131 0.12361 1 0 Mshowa
  292. 0.01756 0.24721 moveto
  293. 0.03006 0.24721 lineto
  294. stroke
  295. 0 setgray
  296. [(0.4)] 0.01131 0.24721 1 0 Mshowa
  297. 0.01756 0.37082 moveto
  298. 0.03006 0.37082 lineto
  299. stroke
  300. 0 setgray
  301. [(0.6)] 0.01131 0.37082 1 0 Mshowa
  302. 0.01756 0.49443 moveto
  303. 0.03006 0.49443 lineto
  304. stroke
  305. 0 setgray
  306. [(0.8)] 0.01131 0.49443 1 0 Mshowa
  307. 0.01756 0.61803 moveto
  308. 0.03006 0.61803 lineto
  309. stroke
  310. 0 setgray
  311. [(1)] 0.01131 0.61803 1 0 Mshowa
  312. 0 setgray
  313. [()] 0.02381 0.62428 0 -1 Mshowa
  314. grestore
  315. grestore
  316. 0 0 moveto
  317. 1 0 lineto
  318. 1 0.618034 lineto
  319. 0 0.618034 lineto
  320. closepath
  321. clip
  322. newpath
  323. 0 setgray
  324. gsave
  325. gsave
  326. 0.004 setlinewidth
  327. 0.02381 0.61803 moveto
  328. 0.06349 0.54541 lineto
  329. 0.10317 0.48133 lineto
  330. 0.14286 0.42477 lineto
  331. 0.18254 0.37486 lineto
  332. 0.22222 0.33081 lineto
  333. 0.2619 0.29194 lineto
  334. 0.30159 0.25763 lineto
  335. 0.34127 0.22736 lineto
  336. 0.38095 0.20065 lineto
  337. 0.42063 0.17707 lineto
  338. 0.46032 0.15626 lineto
  339. 0.5 0.1379 lineto
  340. 0.53968 0.1217 lineto
  341. 0.57937 0.1074 lineto
  342. 0.61905 0.09478 lineto
  343. 0.65873 0.08364 lineto
  344. 0.69841 0.07381 lineto
  345. 0.7381 0.06514 lineto
  346. 0.77778 0.05749 lineto
  347. 0.81746 0.05073 lineto
  348. 0.85714 0.04477 lineto
  349. 0.89683 0.03951 lineto
  350. 0.93651 0.03487 lineto
  351. 0.97619 0.03077 lineto
  352. stroke
  353. grestore
  354. grestore
  355. % End of Graphics
  356. MathPictureEnd
  357. :[font = subsection; inactive; startGroup; ]
  358. T60
  359. :[font = text; inactive; ]
  360. In audio, a reasonable definition of the end of an exponential envelope is when the final decay drops the level by 60 decibels (dB).  This decay time for exponentials is called t60 in the reverberation literature.  Since Amp_dB = 20 Log[10,Amp], this means we have the formula
  361. :[font = subsubsection; inactive; startGroup; ]
  362. Derivation of t60
  363. :[font = input; startGroup; ]
  364. Clear[A,tau,t60];
  365. -60 == 20 Log[10,f1[t60]/A]
  366. :[font = output; inactive; output; endGroup; ]
  367. -60 == (20*Log[E^(-(t60/tau))])/Log[10]
  368. ;[o]
  369.                -(t60/tau)
  370.        20 Log[E          ]
  371. -60 == -------------------
  372.              Log[10]
  373. :[font = text; inactive; ]
  374. We divide by A because we are interested in the decay factor, not the absolute final value.  Solving the above equation for t60 can be done as follows.  First divide both sides by 20, then raise 10 to the value on each side to get
  375. :[font = input; startGroup; ]
  376. 0.001 == f1[t60]/A
  377. :[font = output; inactive; output; endGroup; ]
  378. 0.001 == E^(-(t60/tau))
  379. ;[o]
  380.           -(t60/tau)
  381. 0.001 == E
  382. :[font = input; startGroup; ]
  383. Solve[%,t60]
  384. :[font = message; inactive; ]
  385. Solve::ifun: 
  386.    Warning: inverse functions are being used by Solve,
  387.     so some solutions may not be found.
  388. :[font = output; inactive; output; endGroup; endGroup; ]
  389. {{t60 -> 6.907755278982137*tau}}
  390. ;[o]
  391. {{t60 -> 6.90776 tau}}
  392. :[font = text; inactive; ]
  393. Thus, t60 is about 7 time constants, or 6.91 tau to 3 digits accuracy.
  394. :[font = subsubsection; inactive; startGroup; ]
  395. Pictures of 60 dB Decay
  396. :[font = input; startGroup; ]
  397. A = 1;
  398. tau = 3;
  399. t60 = 6.91 tau;
  400. Plot[f1[t],{t,0,t60},
  401.     PlotRange->{0,A},
  402.     AxesLabel->{"time(sec)",""},
  403.     PlotLabel->"Decay of -60 dB"];
  404. :[font = postscript; inactive; PostScript; output; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  405. %!
  406. %%Creator: Mathematica
  407. %%AspectRatio: 0.61803 
  408. MathPictureStart
  409. % Scaling calculations
  410. 0.02381 0.04594 0 0.61803 [
  411. [(Decay of -60 dB)] 0.5 0.62428 0 -1 Msboxa
  412. [(5)] 0.25352 -0.0125 0 1 Msboxa
  413. [(10)] 0.48323 -0.0125 0 1 Msboxa
  414. [(15)] 0.71294 -0.0125 0 1 Msboxa
  415. [(20)] 0.94265 -0.0125 0 1 Msboxa
  416. [(time\(sec\))] 1.00625 0 -1 0 Msboxa
  417. [(0.2)] 0.01131 0.12361 1 0 Msboxa
  418. [(0.4)] 0.01131 0.24721 1 0 Msboxa
  419. [(0.6)] 0.01131 0.37082 1 0 Msboxa
  420. [(0.8)] 0.01131 0.49443 1 0 Msboxa
  421. [(1)] 0.01131 0.61803 1 0 Msboxa
  422. [()] 0.02381 0.62428 0 -1 Msboxa
  423. [ -0.001 -0.00725 0 0 ]
  424. [ 1.001 0.61903 0 0 ]
  425. ] MathScale
  426. % Start of Graphics
  427. 1 setlinecap
  428. 1 setlinejoin
  429. newpath
  430. %%Object: Graphics
  431. [ ] 0 setdash
  432. 0 setgray
  433. 0 setgray
  434. [(Decay of -60 dB)] 0.5 0.62428 0 -1 Mshowa
  435. gsave
  436. gsave
  437. 0.002 setlinewidth
  438. 0 0 moveto
  439. 1 0 lineto
  440. stroke
  441. 0.25352 -0.00625 moveto
  442. 0.25352 0.00625 lineto
  443. stroke
  444. 0 setgray
  445. [(5)] 0.25352 -0.0125 0 1 Mshowa
  446. 0.48323 -0.00625 moveto
  447. 0.48323 0.00625 lineto
  448. stroke
  449. 0 setgray
  450. [(10)] 0.48323 -0.0125 0 1 Mshowa
  451. 0.71294 -0.00625 moveto
  452. 0.71294 0.00625 lineto
  453. stroke
  454. 0 setgray
  455. [(15)] 0.71294 -0.0125 0 1 Mshowa
  456. 0.94265 -0.00625 moveto
  457. 0.94265 0.00625 lineto
  458. stroke
  459. 0 setgray
  460. [(20)] 0.94265 -0.0125 0 1 Mshowa
  461. 0 setgray
  462. [(time\(sec\))] 1.00625 0 -1 0 Mshowa
  463. 0.02381 0 moveto
  464. 0.02381 0.61803 lineto
  465. stroke
  466. 0.01756 0.12361 moveto
  467. 0.03006 0.12361 lineto
  468. stroke
  469. 0 setgray
  470. [(0.2)] 0.01131 0.12361 1 0 Mshowa
  471. 0.01756 0.24721 moveto
  472. 0.03006 0.24721 lineto
  473. stroke
  474. 0 setgray
  475. [(0.4)] 0.01131 0.24721 1 0 Mshowa
  476. 0.01756 0.37082 moveto
  477. 0.03006 0.37082 lineto
  478. stroke
  479. 0 setgray
  480. [(0.6)] 0.01131 0.37082 1 0 Mshowa
  481. 0.01756 0.49443 moveto
  482. 0.03006 0.49443 lineto
  483. stroke
  484. 0 setgray
  485. [(0.8)] 0.01131 0.49443 1 0 Mshowa
  486. 0.01756 0.61803 moveto
  487. 0.03006 0.61803 lineto
  488. stroke
  489. 0 setgray
  490. [(1)] 0.01131 0.61803 1 0 Mshowa
  491. 0 setgray
  492. [()] 0.02381 0.62428 0 -1 Mshowa
  493. grestore
  494. grestore
  495. 0 0 moveto
  496. 1 0 lineto
  497. 1 0.618034 lineto
  498. 0 0.618034 lineto
  499. closepath
  500. clip
  501. newpath
  502. 0 setgray
  503. gsave
  504. gsave
  505. 0.004 setlinewidth
  506. 0.02381 0.61803 moveto
  507. 0.06349 0.46342 lineto
  508. 0.10317 0.34748 lineto
  509. 0.14286 0.26055 lineto
  510. 0.18254 0.19537 lineto
  511. 0.22222 0.14649 lineto
  512. 0.2619 0.10984 lineto
  513. 0.30159 0.08236 lineto
  514. 0.34127 0.06176 lineto
  515. 0.38095 0.04631 lineto
  516. 0.42063 0.03472 lineto
  517. 0.46032 0.02604 lineto
  518. 0.5 0.01952 lineto
  519. 0.53968 0.01464 lineto
  520. 0.57937 0.01098 lineto
  521. 0.61905 0.00823 lineto
  522. 0.65873 0.00617 lineto
  523. 0.69841 0.00463 lineto
  524. 0.7381 0.00347 lineto
  525. 0.77778 0.0026 lineto
  526. 0.81746 0.00195 lineto
  527. 0.85714 0.00146 lineto
  528. 0.89683 0.0011 lineto
  529. 0.93651 0.00082 lineto
  530. 0.97619 0.00062 lineto
  531. stroke
  532. grestore
  533. grestore
  534. % End of Graphics
  535. MathPictureEnd
  536. :[font = text; inactive; ]
  537. Same thing on a dB scale:
  538. :[font = input; startGroup; ]
  539. Plot[20 Log[10,f1[t]],{t,0,t60},
  540.     PlotRange->{-60,20 Log[10,A]},
  541.     AxesLabel->{"time(sec)",""},
  542.     PlotLabel->"Decay of -60 dB on a dB scale"];
  543. :[font = message; inactive; ]
  544. General::dby0: Division by zero.
  545. :[font = postscript; inactive; PostScript; output; endGroup; endGroup; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  546. %!
  547. %%Creator: Mathematica
  548. %%AspectRatio: 0.61803 
  549. MathPictureStart
  550. % Scaling calculations
  551. 0.02381 0.04594 0.61803 0.0103 [
  552. [(Decay of -60 dB on a dB scale)] 0.5 0.62428 0 -1 Msboxa
  553. [(5)] 0.25352 0.60553 0 1 Msboxa
  554. [(10)] 0.48323 0.60553 0 1 Msboxa
  555. [(15)] 0.71294 0.60553 0 1 Msboxa
  556. [(20)] 0.94265 0.60553 0 1 Msboxa
  557. [(time\(sec\))] 1.00625 0.61803 -1 0 Msboxa
  558. [(-60)] 0.01131 0 1 0 Msboxa
  559. [(-50)] 0.01131 0.10301 1 0 Msboxa
  560. [(-40)] 0.01131 0.20601 1 0 Msboxa
  561. [(-30)] 0.01131 0.30902 1 0 Msboxa
  562. [(-20)] 0.01131 0.41202 1 0 Msboxa
  563. [(-10)] 0.01131 0.51503 1 0 Msboxa
  564. [()] 0.02381 0.62428 0 -1 Msboxa
  565. [ -0.001 -0.001 0 0 ]
  566. [ 1.001 0.62528 0 0 ]
  567. ] MathScale
  568. % Start of Graphics
  569. 1 setlinecap
  570. 1 setlinejoin
  571. newpath
  572. %%Object: Graphics
  573. [ ] 0 setdash
  574. 0 setgray
  575. 0 setgray
  576. [(Decay of -60 dB on a dB scale)] 0.5 0.62428 0 -1 Mshowa
  577. gsave
  578. gsave
  579. 0.002 setlinewidth
  580. 0 0.61803 moveto
  581. 1 0.61803 lineto
  582. stroke
  583. 0.25352 0.61178 moveto
  584. 0.25352 0.62428 lineto
  585. stroke
  586. 0 setgray
  587. [(5)] 0.25352 0.60553 0 1 Mshowa
  588. 0.48323 0.61178 moveto
  589. 0.48323 0.62428 lineto
  590. stroke
  591. 0 setgray
  592. [(10)] 0.48323 0.60553 0 1 Mshowa
  593. 0.71294 0.61178 moveto
  594. 0.71294 0.62428 lineto
  595. stroke
  596. 0 setgray
  597. [(15)] 0.71294 0.60553 0 1 Mshowa
  598. 0.94265 0.61178 moveto
  599. 0.94265 0.62428 lineto
  600. stroke
  601. 0 setgray
  602. [(20)] 0.94265 0.60553 0 1 Mshowa
  603. 0 setgray
  604. [(time\(sec\))] 1.00625 0.61803 -1 0 Mshowa
  605. 0.02381 0 moveto
  606. 0.02381 0.61803 lineto
  607. stroke
  608. 0.01756 0 moveto
  609. 0.03006 0 lineto
  610. stroke
  611. 0 setgray
  612. [(-60)] 0.01131 0 1 0 Mshowa
  613. 0.01756 0.10301 moveto
  614. 0.03006 0.10301 lineto
  615. stroke
  616. 0 setgray
  617. [(-50)] 0.01131 0.10301 1 0 Mshowa
  618. 0.01756 0.20601 moveto
  619. 0.03006 0.20601 lineto
  620. stroke
  621. 0 setgray
  622. [(-40)] 0.01131 0.20601 1 0 Mshowa
  623. 0.01756 0.30902 moveto
  624. 0.03006 0.30902 lineto
  625. stroke
  626. 0 setgray
  627. [(-30)] 0.01131 0.30902 1 0 Mshowa
  628. 0.01756 0.41202 moveto
  629. 0.03006 0.41202 lineto
  630. stroke
  631. 0 setgray
  632. [(-20)] 0.01131 0.41202 1 0 Mshowa
  633. 0.01756 0.51503 moveto
  634. 0.03006 0.51503 lineto
  635. stroke
  636. 0 setgray
  637. [(-10)] 0.01131 0.51503 1 0 Mshowa
  638. 0 setgray
  639. [()] 0.02381 0.62428 0 -1 Mshowa
  640. grestore
  641. grestore
  642. 0 0 moveto
  643. 1 0 lineto
  644. 1 0.618034 lineto
  645. 0 0.618034 lineto
  646. closepath
  647. clip
  648. newpath
  649. 0 setgray
  650. gsave
  651. gsave
  652. 0.004 setlinewidth
  653. 0.02381 0.61803 moveto
  654. 0.06349 0.59227 lineto
  655. 0.10317 0.56651 lineto
  656. 0.14286 0.54075 lineto
  657. 0.18254 0.51499 lineto
  658. 0.22222 0.48924 lineto
  659. 0.2619 0.46348 lineto
  660. 0.30159 0.43772 lineto
  661. 0.34127 0.41196 lineto
  662. 0.38095 0.3862 lineto
  663. 0.42063 0.36044 lineto
  664. 0.46032 0.33468 lineto
  665. 0.5 0.30892 lineto
  666. 0.53968 0.28316 lineto
  667. 0.57937 0.2574 lineto
  668. 0.61905 0.23164 lineto
  669. 0.65873 0.20588 lineto
  670. 0.69841 0.18012 lineto
  671. 0.7381 0.15436 lineto
  672. 0.77778 0.1286 lineto
  673. 0.81746 0.10284 lineto
  674. 0.85714 0.07708 lineto
  675. 0.89683 0.05132 lineto
  676. 0.93651 0.02556 lineto
  677. 0.97619 -0.0002 lineto
  678. stroke
  679. grestore
  680. grestore
  681. % End of Graphics
  682. MathPictureEnd
  683. :[font = subsection; inactive; startGroup; ]
  684. Exponentials which Approach a Non-Zero Asymptote
  685. :[font = text; inactive; ]
  686. Note that the function 
  687. :[font = input; startGroup; ]
  688. Clear[A,tau];
  689. f2[t_] = A-f1[t]
  690. :[font = output; inactive; output; endGroup; ]
  691. A - A/E^(t/tau)
  692. ;[o]
  693.       A
  694. A - ------
  695.      t/tau
  696.     E
  697. :[font = text; inactive; ]
  698. approaches A starting from 0:
  699. :[font = input; startGroup; ]
  700. A=1;
  701. tau=3;
  702. Plot[f2[t],{t,0,t60},
  703.     PlotRange->{0,A},
  704.     AxesLabel->{"time(sec)",""},
  705.     PlotLabel->"Exponential approach to A=1"];
  706. :[font = postscript; inactive; PostScript; output; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  707. %!
  708. %%Creator: Mathematica
  709. %%AspectRatio: 0.61803 
  710. MathPictureStart
  711. % Scaling calculations
  712. 0.02381 0.04594 0 0.61803 [
  713. [(Exponential approach to A=1)] 0.5 0.62428 0 -1 Msboxa
  714. [(5)] 0.25352 -0.0125 0 1 Msboxa
  715. [(10)] 0.48323 -0.0125 0 1 Msboxa
  716. [(15)] 0.71294 -0.0125 0 1 Msboxa
  717. [(20)] 0.94265 -0.0125 0 1 Msboxa
  718. [(time\(sec\))] 1.00625 0 -1 0 Msboxa
  719. [(0.2)] 0.01131 0.12361 1 0 Msboxa
  720. [(0.4)] 0.01131 0.24721 1 0 Msboxa
  721. [(0.6)] 0.01131 0.37082 1 0 Msboxa
  722. [(0.8)] 0.01131 0.49443 1 0 Msboxa
  723. [(1)] 0.01131 0.61803 1 0 Msboxa
  724. [()] 0.02381 0.62428 0 -1 Msboxa
  725. [ -0.001 -0.00725 0 0 ]
  726. [ 1.001 0.61903 0 0 ]
  727. ] MathScale
  728. % Start of Graphics
  729. 1 setlinecap
  730. 1 setlinejoin
  731. newpath
  732. %%Object: Graphics
  733. [ ] 0 setdash
  734. 0 setgray
  735. 0 setgray
  736. [(Exponential approach to A=1)] 0.5 0.62428 0 -1 Mshowa
  737. gsave
  738. gsave
  739. 0.002 setlinewidth
  740. 0 0 moveto
  741. 1 0 lineto
  742. stroke
  743. 0.25352 -0.00625 moveto
  744. 0.25352 0.00625 lineto
  745. stroke
  746. 0 setgray
  747. [(5)] 0.25352 -0.0125 0 1 Mshowa
  748. 0.48323 -0.00625 moveto
  749. 0.48323 0.00625 lineto
  750. stroke
  751. 0 setgray
  752. [(10)] 0.48323 -0.0125 0 1 Mshowa
  753. 0.71294 -0.00625 moveto
  754. 0.71294 0.00625 lineto
  755. stroke
  756. 0 setgray
  757. [(15)] 0.71294 -0.0125 0 1 Mshowa
  758. 0.94265 -0.00625 moveto
  759. 0.94265 0.00625 lineto
  760. stroke
  761. 0 setgray
  762. [(20)] 0.94265 -0.0125 0 1 Mshowa
  763. 0 setgray
  764. [(time\(sec\))] 1.00625 0 -1 0 Mshowa
  765. 0.02381 0 moveto
  766. 0.02381 0.61803 lineto
  767. stroke
  768. 0.01756 0.12361 moveto
  769. 0.03006 0.12361 lineto
  770. stroke
  771. 0 setgray
  772. [(0.2)] 0.01131 0.12361 1 0 Mshowa
  773. 0.01756 0.24721 moveto
  774. 0.03006 0.24721 lineto
  775. stroke
  776. 0 setgray
  777. [(0.4)] 0.01131 0.24721 1 0 Mshowa
  778. 0.01756 0.37082 moveto
  779. 0.03006 0.37082 lineto
  780. stroke
  781. 0 setgray
  782. [(0.6)] 0.01131 0.37082 1 0 Mshowa
  783. 0.01756 0.49443 moveto
  784. 0.03006 0.49443 lineto
  785. stroke
  786. 0 setgray
  787. [(0.8)] 0.01131 0.49443 1 0 Mshowa
  788. 0.01756 0.61803 moveto
  789. 0.03006 0.61803 lineto
  790. stroke
  791. 0 setgray
  792. [(1)] 0.01131 0.61803 1 0 Mshowa
  793. 0 setgray
  794. [()] 0.02381 0.62428 0 -1 Mshowa
  795. grestore
  796. grestore
  797. 0 0 moveto
  798. 1 0 lineto
  799. 1 0.618034 lineto
  800. 0 0.618034 lineto
  801. closepath
  802. clip
  803. newpath
  804. 0 setgray
  805. gsave
  806. gsave
  807. 0.004 setlinewidth
  808. 0.02381 0 moveto
  809. 0.06349 0.15462 lineto
  810. 0.10317 0.27055 lineto
  811. 0.14286 0.35748 lineto
  812. 0.18254 0.42267 lineto
  813. 0.22222 0.47154 lineto
  814. 0.2619 0.50819 lineto
  815. 0.30159 0.53567 lineto
  816. 0.34127 0.55628 lineto
  817. 0.38095 0.57173 lineto
  818. 0.42063 0.58331 lineto
  819. 0.46032 0.592 lineto
  820. 0.5 0.59851 lineto
  821. 0.53968 0.6034 lineto
  822. 0.57937 0.60706 lineto
  823. 0.61905 0.6098 lineto
  824. 0.65873 0.61186 lineto
  825. 0.69841 0.61341 lineto
  826. 0.7381 0.61456 lineto
  827. 0.77778 0.61543 lineto
  828. 0.81746 0.61608 lineto
  829. 0.85714 0.61657 lineto
  830. 0.89683 0.61694 lineto
  831. 0.93651 0.61721 lineto
  832. 0.97619 0.61742 lineto
  833. stroke
  834. grestore
  835. grestore
  836. % End of Graphics
  837. MathPictureEnd
  838. :[font = text; inactive; ]
  839. When approaching a constant breakpoint value A1 given an initial value A0 at time 0, the formula to use is like the one above, but adding in the initial value A0, and using A1-A0 (the amplitude difference) in place of A:
  840. :[font = input; startGroup; ]
  841. Clear[A,tau];
  842. A = A1-A0;
  843. f3[t_] = A0 + f2[t]
  844. :[font = output; inactive; output; endGroup; ]
  845. 2 - E^(-(t/tau))
  846. ;[o]
  847.      -(t/tau)
  848. 2 - E
  849. :[font = text; inactive; ]
  850. Let's plot this for some sample values:
  851. :[font = input; startGroup; ]
  852. A0=1;
  853. A1=2;
  854. tau=3;
  855. Plot[f3[t],{t,0,t60},
  856.     PlotRange->{0,A1},
  857.     AxesLabel->{"time(sec)",""},
  858.     PlotLabel->"Exp glide from A0=1 to A1=2"];
  859. :[font = postscript; inactive; PostScript; output; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  860. %!
  861. %%Creator: Mathematica
  862. %%AspectRatio: 0.61803 
  863. MathPictureStart
  864. % Scaling calculations
  865. 0.02381 0.04594 0 0.30902 [
  866. [(Exp glide from A0=1 to A1=2)] 0.5 0.62428 0 -1 Msboxa
  867. [(5)] 0.25352 -0.0125 0 1 Msboxa
  868. [(10)] 0.48323 -0.0125 0 1 Msboxa
  869. [(15)] 0.71294 -0.0125 0 1 Msboxa
  870. [(20)] 0.94265 -0.0125 0 1 Msboxa
  871. [(time\(sec\))] 1.00625 0 -1 0 Msboxa
  872. [(0.25)] 0.01131 0.07725 1 0 Msboxa
  873. [(0.5)] 0.01131 0.15451 1 0 Msboxa
  874. [(0.75)] 0.01131 0.23176 1 0 Msboxa
  875. [(1)] 0.01131 0.30902 1 0 Msboxa
  876. [(1.25)] 0.01131 0.38627 1 0 Msboxa
  877. [(1.5)] 0.01131 0.46353 1 0 Msboxa
  878. [(1.75)] 0.01131 0.54078 1 0 Msboxa
  879. [(2)] 0.01131 0.61803 1 0 Msboxa
  880. [()] 0.02381 0.62428 0 -1 Msboxa
  881. [ -0.001 -0.00725 0 0 ]
  882. [ 1.001 0.61903 0 0 ]
  883. ] MathScale
  884. % Start of Graphics
  885. 1 setlinecap
  886. 1 setlinejoin
  887. newpath
  888. %%Object: Graphics
  889. [ ] 0 setdash
  890. 0 setgray
  891. 0 setgray
  892. [(Exp glide from A0=1 to A1=2)] 0.5 0.62428 0 -1 Mshowa
  893. gsave
  894. gsave
  895. 0.002 setlinewidth
  896. 0 0 moveto
  897. 1 0 lineto
  898. stroke
  899. 0.25352 -0.00625 moveto
  900. 0.25352 0.00625 lineto
  901. stroke
  902. 0 setgray
  903. [(5)] 0.25352 -0.0125 0 1 Mshowa
  904. 0.48323 -0.00625 moveto
  905. 0.48323 0.00625 lineto
  906. stroke
  907. 0 setgray
  908. [(10)] 0.48323 -0.0125 0 1 Mshowa
  909. 0.71294 -0.00625 moveto
  910. 0.71294 0.00625 lineto
  911. stroke
  912. 0 setgray
  913. [(15)] 0.71294 -0.0125 0 1 Mshowa
  914. 0.94265 -0.00625 moveto
  915. 0.94265 0.00625 lineto
  916. stroke
  917. 0 setgray
  918. [(20)] 0.94265 -0.0125 0 1 Mshowa
  919. 0 setgray
  920. [(time\(sec\))] 1.00625 0 -1 0 Mshowa
  921. 0.02381 0 moveto
  922. 0.02381 0.61803 lineto
  923. stroke
  924. 0.01756 0.07725 moveto
  925. 0.03006 0.07725 lineto
  926. stroke
  927. 0 setgray
  928. [(0.25)] 0.01131 0.07725 1 0 Mshowa
  929. 0.01756 0.15451 moveto
  930. 0.03006 0.15451 lineto
  931. stroke
  932. 0 setgray
  933. [(0.5)] 0.01131 0.15451 1 0 Mshowa
  934. 0.01756 0.23176 moveto
  935. 0.03006 0.23176 lineto
  936. stroke
  937. 0 setgray
  938. [(0.75)] 0.01131 0.23176 1 0 Mshowa
  939. 0.01756 0.30902 moveto
  940. 0.03006 0.30902 lineto
  941. stroke
  942. 0 setgray
  943. [(1)] 0.01131 0.30902 1 0 Mshowa
  944. 0.01756 0.38627 moveto
  945. 0.03006 0.38627 lineto
  946. stroke
  947. 0 setgray
  948. [(1.25)] 0.01131 0.38627 1 0 Mshowa
  949. 0.01756 0.46353 moveto
  950. 0.03006 0.46353 lineto
  951. stroke
  952. 0 setgray
  953. [(1.5)] 0.01131 0.46353 1 0 Mshowa
  954. 0.01756 0.54078 moveto
  955. 0.03006 0.54078 lineto
  956. stroke
  957. 0 setgray
  958. [(1.75)] 0.01131 0.54078 1 0 Mshowa
  959. 0.01756 0.61803 moveto
  960. 0.03006 0.61803 lineto
  961. stroke
  962. 0 setgray
  963. [(2)] 0.01131 0.61803 1 0 Mshowa
  964. 0 setgray
  965. [()] 0.02381 0.62428 0 -1 Mshowa
  966. grestore
  967. grestore
  968. 0 0 moveto
  969. 1 0 lineto
  970. 1 0.618034 lineto
  971. 0 0.618034 lineto
  972. closepath
  973. clip
  974. newpath
  975. 0 setgray
  976. gsave
  977. gsave
  978. 0.004 setlinewidth
  979. 0.02381 0.30902 moveto
  980. 0.06349 0.38633 lineto
  981. 0.10317 0.44429 lineto
  982. 0.14286 0.48776 lineto
  983. 0.18254 0.52035 lineto
  984. 0.22222 0.54479 lineto
  985. 0.2619 0.56311 lineto
  986. 0.30159 0.57685 lineto
  987. 0.34127 0.58716 lineto
  988. 0.38095 0.59488 lineto
  989. 0.42063 0.60067 lineto
  990. 0.46032 0.60502 lineto
  991. 0.5 0.60827 lineto
  992. 0.53968 0.61071 lineto
  993. 0.57937 0.61255 lineto
  994. 0.61905 0.61392 lineto
  995. 0.65873 0.61495 lineto
  996. 0.69841 0.61572 lineto
  997. 0.7381 0.6163 lineto
  998. 0.77778 0.61673 lineto
  999. 0.81746 0.61706 lineto
  1000. 0.85714 0.6173 lineto
  1001. 0.89683 0.61749 lineto
  1002. 0.93651 0.61762 lineto
  1003. 0.97619 0.61773 lineto
  1004. stroke
  1005. grestore
  1006. grestore
  1007. % End of Graphics
  1008. MathPictureEnd
  1009. :[font = text; inactive; endGroup; endGroup; ]
  1010. A Music Kit envelope is put together by concatenating segments such as the above  Actually, the segments are not exactly concatenated.  The asymptote gets changed each breakpoint, so the envelope just starts approaching the new asymptote from wherever it happens to be.
  1011. :[font = section; inactive; startGroup; ]
  1012. Sampled Exponentials
  1013. :[font = subsection; inactive; startGroup; ]
  1014. Replacing t by n T
  1015. :[font = text; inactive; ]
  1016. A digitally sampled exponential is obtained by replacing t with n T, where n is the sample number and T is the sampling interval in seconds.  The sampling-rate is denoted fs.  Thus,
  1017. :[font = input; ]
  1018. T = 1/fs;        (* Corresponding sampling interval *)
  1019. :[font = input; startGroup; ]
  1020. Clear[A,tau,T,n];
  1021. t = n T;
  1022. f1d[n_] = f1[t]        (* Sampled exponential decay *)
  1023. :[font = output; inactive; output; endGroup; ]
  1024. A/E^((T*n)/tau)
  1025. ;[o]
  1026.     A
  1027. ----------
  1028.  (T n)/tau
  1029. E
  1030. :[font = input; startGroup; ]
  1031. Clear[t];
  1032. A=1;
  1033. tau=3;
  1034. T=1;
  1035. ListPlot[Table[f1d[n],{n,t60/T}],
  1036.     PlotRange->{0,A},
  1037.     AxesLabel->{"time(samples)",""},
  1038.     PlotLabel->"Sampled exponential decay"];
  1039. :[font = postscript; inactive; PostScript; output; endGroup; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  1040. %!
  1041. %%Creator: Mathematica
  1042. %%AspectRatio: 0.61803 
  1043. MathPictureStart
  1044. % Scaling calculations
  1045. 0.02381 0.04762 0 0.61803 [
  1046. [(Sampled exponential decay)] 0.5 0.62428 0 -1 Msboxa
  1047. [(5)] 0.2619 -0.0125 0 1 Msboxa
  1048. [(10)] 0.5 -0.0125 0 1 Msboxa
  1049. [(15)] 0.7381 -0.0125 0 1 Msboxa
  1050. [(20)] 0.97619 -0.0125 0 1 Msboxa
  1051. [(time\(samples\))] 1.00625 0 -1 0 Msboxa
  1052. [(0.2)] 0.01131 0.12361 1 0 Msboxa
  1053. [(0.4)] 0.01131 0.24721 1 0 Msboxa
  1054. [(0.6)] 0.01131 0.37082 1 0 Msboxa
  1055. [(0.8)] 0.01131 0.49443 1 0 Msboxa
  1056. [(1)] 0.01131 0.61803 1 0 Msboxa
  1057. [()] 0.02381 0.62428 0 -1 Msboxa
  1058. [ -0.001 -0.00725 0 0 ]
  1059. [ 1.001 0.61903 0 0 ]
  1060. ] MathScale
  1061. % Start of Graphics
  1062. 1 setlinecap
  1063. 1 setlinejoin
  1064. newpath
  1065. %%Object: Graphics
  1066. [ ] 0 setdash
  1067. 0 setgray
  1068. 0 setgray
  1069. [(Sampled exponential decay)] 0.5 0.62428 0 -1 Mshowa
  1070. gsave
  1071. gsave
  1072. 0.002 setlinewidth
  1073. 0 0 moveto
  1074. 1 0 lineto
  1075. stroke
  1076. 0.2619 -0.00625 moveto
  1077. 0.2619 0.00625 lineto
  1078. stroke
  1079. 0 setgray
  1080. [(5)] 0.2619 -0.0125 0 1 Mshowa
  1081. 0.5 -0.00625 moveto
  1082. 0.5 0.00625 lineto
  1083. stroke
  1084. 0 setgray
  1085. [(10)] 0.5 -0.0125 0 1 Mshowa
  1086. 0.7381 -0.00625 moveto
  1087. 0.7381 0.00625 lineto
  1088. stroke
  1089. 0 setgray
  1090. [(15)] 0.7381 -0.0125 0 1 Mshowa
  1091. 0.97619 -0.00625 moveto
  1092. 0.97619 0.00625 lineto
  1093. stroke
  1094. 0 setgray
  1095. [(20)] 0.97619 -0.0125 0 1 Mshowa
  1096. 0 setgray
  1097. [(time\(samples\))] 1.00625 0 -1 0 Mshowa
  1098. 0.02381 0 moveto
  1099. 0.02381 0.61803 lineto
  1100. stroke
  1101. 0.01756 0.12361 moveto
  1102. 0.03006 0.12361 lineto
  1103. stroke
  1104. 0 setgray
  1105. [(0.2)] 0.01131 0.12361 1 0 Mshowa
  1106. 0.01756 0.24721 moveto
  1107. 0.03006 0.24721 lineto
  1108. stroke
  1109. 0 setgray
  1110. [(0.4)] 0.01131 0.24721 1 0 Mshowa
  1111. 0.01756 0.37082 moveto
  1112. 0.03006 0.37082 lineto
  1113. stroke
  1114. 0 setgray
  1115. [(0.6)] 0.01131 0.37082 1 0 Mshowa
  1116. 0.01756 0.49443 moveto
  1117. 0.03006 0.49443 lineto
  1118. stroke
  1119. 0 setgray
  1120. [(0.8)] 0.01131 0.49443 1 0 Mshowa
  1121. 0.01756 0.61803 moveto
  1122. 0.03006 0.61803 lineto
  1123. stroke
  1124. 0 setgray
  1125. [(1)] 0.01131 0.61803 1 0 Mshowa
  1126. 0 setgray
  1127. [()] 0.02381 0.62428 0 -1 Mshowa
  1128. grestore
  1129. grestore
  1130. 0 0 moveto
  1131. 1 0 lineto
  1132. 1 0.618034 lineto
  1133. 0 0.618034 lineto
  1134. closepath
  1135. clip
  1136. newpath
  1137. 0 setgray
  1138. gsave
  1139. 0.008 setlinewidth
  1140. 0.07143 0.44284 Mdot
  1141. 0.11905 0.31731 Mdot
  1142. 0.16667 0.22736 Mdot
  1143. 0.21429 0.16291 Mdot
  1144. 0.2619 0.11673 Mdot
  1145. 0.30952 0.08364 Mdot
  1146. 0.35714 0.05993 Mdot
  1147. 0.40476 0.04294 Mdot
  1148. 0.45238 0.03077 Mdot
  1149. 0.5 0.02205 Mdot
  1150. 0.54762 0.0158 Mdot
  1151. 0.59524 0.01132 Mdot
  1152. 0.64286 0.00811 Mdot
  1153. 0.69048 0.00581 Mdot
  1154. 0.7381 0.00416 Mdot
  1155. 0.78571 0.00298 Mdot
  1156. 0.83333 0.00214 Mdot
  1157. 0.88095 0.00153 Mdot
  1158. 0.92857 0.0011 Mdot
  1159. 0.97619 0.00079 Mdot
  1160. grestore
  1161. % End of Graphics
  1162. MathPictureEnd
  1163. :[font = subsection; inactive; startGroup; ]
  1164. Sampled Exponentials are Geometric Sequences
  1165. :[font = text; inactive; ]
  1166. Note that Exp[-n T / tau] can be written as Exp[-T/tau]^n.
  1167. Define 
  1168. :[font = input; ]
  1169. Clear[A,T,tau,g];
  1170. g = Exp[-T/tau];
  1171. :[font = text; inactive; ]
  1172. Now our basic exponential looks like
  1173. :[font = input; startGroup; ]
  1174. f1d[n] = A g^n
  1175. :[font = output; inactive; output; endGroup; ]
  1176. A/E^((T*n)/tau)
  1177. ;[o]
  1178.     A
  1179. ----------
  1180.  (T n)/tau
  1181. E
  1182. :[font = text; inactive; ]
  1183. This is the function used by the AsympUG unit generator to compute the samples of an exponential.   Note that it can be computed recursively via f1d[n] = g f1d[n-1].   The form f1d[n] = g f1d[n-1] + (1-g) A gives an exponential approach to the value A (show this!).  This latter recursion is what the AsympUG DSP code actually does each sample, except that it uses the variable r = 1-g = 1-Exp[-T/tau], called the "rate".   Thus, the recursion used by asymp.asm is 
  1184.  
  1185.     f1d[n] = (1-r) f1d[n-1] + r A
  1186.     
  1187. to approach the value A exponentially with time-constant tau, where r = 1-Exp[-T/tau].
  1188. The rate is so named because when it is at its maximum value of 1 (tau = 0), A is reached in one sample step, as substitution in the above recurrence immediately shows.  When r is at its minimum value of 0 (tau = infinity), the exponential never gets to the asymptote A.  The source code for AsympUG is in /usr/lib/dsp/ugsrc/asymp.asm.
  1189. :[font = text; inactive; startGroup; ]
  1190. Let's prove its the same function as before:
  1191. :[font = input; startGroup; ]
  1192. A=1;
  1193. tau=3;
  1194. T=1;
  1195. ListPlot[Table[f1d[n],{n,t60/T}],
  1196.     PlotRange->{0,A},
  1197.     AxesLabel->{"time(samples)",""},
  1198.     PlotLabel->"Sampled exponential decay"];
  1199. :[font = postscript; inactive; PostScript; output; endGroup; endGroup; endGroup; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  1200. %!
  1201. %%Creator: Mathematica
  1202. %%AspectRatio: 0.61803 
  1203. MathPictureStart
  1204. % Scaling calculations
  1205. 0.02381 0.04762 0 0.61803 [
  1206. [(Sampled exponential decay)] 0.5 0.62428 0 -1 Msboxa
  1207. [(5)] 0.2619 -0.0125 0 1 Msboxa
  1208. [(10)] 0.5 -0.0125 0 1 Msboxa
  1209. [(15)] 0.7381 -0.0125 0 1 Msboxa
  1210. [(20)] 0.97619 -0.0125 0 1 Msboxa
  1211. [(time\(samples\))] 1.00625 0 -1 0 Msboxa
  1212. [(0.2)] 0.01131 0.12361 1 0 Msboxa
  1213. [(0.4)] 0.01131 0.24721 1 0 Msboxa
  1214. [(0.6)] 0.01131 0.37082 1 0 Msboxa
  1215. [(0.8)] 0.01131 0.49443 1 0 Msboxa
  1216. [(1)] 0.01131 0.61803 1 0 Msboxa
  1217. [()] 0.02381 0.62428 0 -1 Msboxa
  1218. [ -0.001 -0.00725 0 0 ]
  1219. [ 1.001 0.61903 0 0 ]
  1220. ] MathScale
  1221. % Start of Graphics
  1222. 1 setlinecap
  1223. 1 setlinejoin
  1224. newpath
  1225. %%Object: Graphics
  1226. [ ] 0 setdash
  1227. 0 setgray
  1228. 0 setgray
  1229. [(Sampled exponential decay)] 0.5 0.62428 0 -1 Mshowa
  1230. gsave
  1231. gsave
  1232. 0.002 setlinewidth
  1233. 0 0 moveto
  1234. 1 0 lineto
  1235. stroke
  1236. 0.2619 -0.00625 moveto
  1237. 0.2619 0.00625 lineto
  1238. stroke
  1239. 0 setgray
  1240. [(5)] 0.2619 -0.0125 0 1 Mshowa
  1241. 0.5 -0.00625 moveto
  1242. 0.5 0.00625 lineto
  1243. stroke
  1244. 0 setgray
  1245. [(10)] 0.5 -0.0125 0 1 Mshowa
  1246. 0.7381 -0.00625 moveto
  1247. 0.7381 0.00625 lineto
  1248. stroke
  1249. 0 setgray
  1250. [(15)] 0.7381 -0.0125 0 1 Mshowa
  1251. 0.97619 -0.00625 moveto
  1252. 0.97619 0.00625 lineto
  1253. stroke
  1254. 0 setgray
  1255. [(20)] 0.97619 -0.0125 0 1 Mshowa
  1256. 0 setgray
  1257. [(time\(samples\))] 1.00625 0 -1 0 Mshowa
  1258. 0.02381 0 moveto
  1259. 0.02381 0.61803 lineto
  1260. stroke
  1261. 0.01756 0.12361 moveto
  1262. 0.03006 0.12361 lineto
  1263. stroke
  1264. 0 setgray
  1265. [(0.2)] 0.01131 0.12361 1 0 Mshowa
  1266. 0.01756 0.24721 moveto
  1267. 0.03006 0.24721 lineto
  1268. stroke
  1269. 0 setgray
  1270. [(0.4)] 0.01131 0.24721 1 0 Mshowa
  1271. 0.01756 0.37082 moveto
  1272. 0.03006 0.37082 lineto
  1273. stroke
  1274. 0 setgray
  1275. [(0.6)] 0.01131 0.37082 1 0 Mshowa
  1276. 0.01756 0.49443 moveto
  1277. 0.03006 0.49443 lineto
  1278. stroke
  1279. 0 setgray
  1280. [(0.8)] 0.01131 0.49443 1 0 Mshowa
  1281. 0.01756 0.61803 moveto
  1282. 0.03006 0.61803 lineto
  1283. stroke
  1284. 0 setgray
  1285. [(1)] 0.01131 0.61803 1 0 Mshowa
  1286. 0 setgray
  1287. [()] 0.02381 0.62428 0 -1 Mshowa
  1288. grestore
  1289. grestore
  1290. 0 0 moveto
  1291. 1 0 lineto
  1292. 1 0.618034 lineto
  1293. 0 0.618034 lineto
  1294. closepath
  1295. clip
  1296. newpath
  1297. 0 setgray
  1298. gsave
  1299. 0.008 setlinewidth
  1300. 0.07143 0.44284 Mdot
  1301. 0.11905 0.31731 Mdot
  1302. 0.16667 0.22736 Mdot
  1303. 0.21429 0.16291 Mdot
  1304. 0.2619 0.11673 Mdot
  1305. 0.30952 0.08364 Mdot
  1306. 0.35714 0.05993 Mdot
  1307. 0.40476 0.04294 Mdot
  1308. 0.45238 0.03077 Mdot
  1309. 0.5 0.02205 Mdot
  1310. 0.54762 0.0158 Mdot
  1311. 0.59524 0.01132 Mdot
  1312. 0.64286 0.00811 Mdot
  1313. 0.69048 0.00581 Mdot
  1314. 0.7381 0.00416 Mdot
  1315. 0.78571 0.00298 Mdot
  1316. 0.83333 0.00214 Mdot
  1317. 0.88095 0.00153 Mdot
  1318. 0.92857 0.0011 Mdot
  1319. 0.97619 0.00079 Mdot
  1320. grestore
  1321. % End of Graphics
  1322. MathPictureEnd
  1323. :[font = section; inactive; startGroup; ]
  1324. The Music Kit Envelope Smoothness Parameter
  1325. :[font = subsection; inactive; startGroup; ]
  1326. T48
  1327. :[font = text; inactive; ]
  1328. Instead of t60, the Music Kit uses "t48" which is the time it takes to decay -48 dB from the initial starting value (in the case of final decay toward zero).
  1329. :[font = input; startGroup; ]
  1330. t48taus = -N[Log[10^(-48/20)]]    (* "t48" in time-constants *)
  1331. :[font = output; inactive; output; ]
  1332. 5.52620422318571
  1333. ;[o]
  1334. 5.5262
  1335. :[font = text; inactive; ]
  1336. Thus, 5.53 time-constants is about 48 dB of decay.
  1337. :[font = input; startGroup; ]
  1338. -20 Log[10, Exp[ - t48taus tau / tau]]    (* test it out *)
  1339. :[font = output; inactive; output; endGroup; endGroup; endGroup; ]
  1340. 48.
  1341. ;[o]
  1342. 48.
  1343. :[font = subsection; inactive; startGroup; ]
  1344. Relating Smoothness to Time Constant or Rate
  1345. :[font = text; inactive; endGroup; ]
  1346. Recall that smoothness is defined as the number of breakpoint intervals to reach the next breakpoint value.  In this context, "reaching" the next breakpoint value is defined as traversing t48 seconds along the exponential which is approaching that breakpoint value. Let d denote the time between the current breakpoint and the next breakpoint.  Then, for S=1, d must be t48.  For S=2, we want d to be 1/2 of t48, and so on.  Thus, the fundamental relation relating smoothness to exponential decay is 
  1347.  
  1348.     d S = t48
  1349.  
  1350. We found above that t48 was about 5.5 time constants. Thus, 
  1351.  
  1352.     d S = 5.5262 tau 
  1353.     
  1354. (to 4 digits).  Since tau is related to r by the formula r = 1-g = 1-Exp[-T/tau], we can solve for the AsympUG rate r in terms of S to get
  1355.  
  1356.     r = 1 - Exp[-5.5262 / (d S)]
  1357.     
  1358. where d is the distance to the next breakpoint in seconds, and S is the smoothing parameter. Since the default value for S is 1,  we see that increasing it to 2 corresponds to taking the square root of g so that r goes from 1-g to 1-Sqrt[g].  Since g is between 0 and 1, Sqrt[g] is always larger than g, so r (the "rate") is made smaller by increasing smoothness.  This actually makes sense!
  1359. :[font = subsection; inactive; ]
  1360. What AsympUG Does
  1361. :[font = text; inactive; ]
  1362. As mentioned above, AsympUG generates an exponential envelope segment using the recursion
  1363.  
  1364.     f1d[n] = g f1d[n-1] + r A
  1365.  
  1366. Let's demonstrate this recursion for the following example:
  1367. :[font = input; startGroup; ]
  1368. A = 1;
  1369. tau=3;
  1370. T=1;
  1371. ListPlot[Table[f1d[n],{n,t60/T}],
  1372.     PlotRange->{0,A},
  1373.     AxesLabel->{"time(samples)",""},
  1374.     PlotLabel->"Sampled exponential decay"];
  1375. :[font = postscript; inactive; PostScript; output; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  1376. %!
  1377. %%Creator: Mathematica
  1378. %%AspectRatio: 0.61803 
  1379. MathPictureStart
  1380. % Scaling calculations
  1381. 0.02381 0.04762 0 0.61803 [
  1382. [(Sampled exponential decay)] 0.5 0.62428 0 -1 Msboxa
  1383. [(5)] 0.2619 -0.0125 0 1 Msboxa
  1384. [(10)] 0.5 -0.0125 0 1 Msboxa
  1385. [(15)] 0.7381 -0.0125 0 1 Msboxa
  1386. [(20)] 0.97619 -0.0125 0 1 Msboxa
  1387. [(time\(samples\))] 1.00625 0 -1 0 Msboxa
  1388. [(0.2)] 0.01131 0.12361 1 0 Msboxa
  1389. [(0.4)] 0.01131 0.24721 1 0 Msboxa
  1390. [(0.6)] 0.01131 0.37082 1 0 Msboxa
  1391. [(0.8)] 0.01131 0.49443 1 0 Msboxa
  1392. [(1)] 0.01131 0.61803 1 0 Msboxa
  1393. [()] 0.02381 0.62428 0 -1 Msboxa
  1394. [ -0.001 -0.00725 0 0 ]
  1395. [ 1.001 0.61903 0 0 ]
  1396. ] MathScale
  1397. % Start of Graphics
  1398. 1 setlinecap
  1399. 1 setlinejoin
  1400. newpath
  1401. %%Object: Graphics
  1402. [ ] 0 setdash
  1403. 0 setgray
  1404. 0 setgray
  1405. [(Sampled exponential decay)] 0.5 0.62428 0 -1 Mshowa
  1406. gsave
  1407. gsave
  1408. 0.002 setlinewidth
  1409. 0 0 moveto
  1410. 1 0 lineto
  1411. stroke
  1412. 0.2619 -0.00625 moveto
  1413. 0.2619 0.00625 lineto
  1414. stroke
  1415. 0 setgray
  1416. [(5)] 0.2619 -0.0125 0 1 Mshowa
  1417. 0.5 -0.00625 moveto
  1418. 0.5 0.00625 lineto
  1419. stroke
  1420. 0 setgray
  1421. [(10)] 0.5 -0.0125 0 1 Mshowa
  1422. 0.7381 -0.00625 moveto
  1423. 0.7381 0.00625 lineto
  1424. stroke
  1425. 0 setgray
  1426. [(15)] 0.7381 -0.0125 0 1 Mshowa
  1427. 0.97619 -0.00625 moveto
  1428. 0.97619 0.00625 lineto
  1429. stroke
  1430. 0 setgray
  1431. [(20)] 0.97619 -0.0125 0 1 Mshowa
  1432. 0 setgray
  1433. [(time\(samples\))] 1.00625 0 -1 0 Mshowa
  1434. 0.02381 0 moveto
  1435. 0.02381 0.61803 lineto
  1436. stroke
  1437. 0.01756 0.12361 moveto
  1438. 0.03006 0.12361 lineto
  1439. stroke
  1440. 0 setgray
  1441. [(0.2)] 0.01131 0.12361 1 0 Mshowa
  1442. 0.01756 0.24721 moveto
  1443. 0.03006 0.24721 lineto
  1444. stroke
  1445. 0 setgray
  1446. [(0.4)] 0.01131 0.24721 1 0 Mshowa
  1447. 0.01756 0.37082 moveto
  1448. 0.03006 0.37082 lineto
  1449. stroke
  1450. 0 setgray
  1451. [(0.6)] 0.01131 0.37082 1 0 Mshowa
  1452. 0.01756 0.49443 moveto
  1453. 0.03006 0.49443 lineto
  1454. stroke
  1455. 0 setgray
  1456. [(0.8)] 0.01131 0.49443 1 0 Mshowa
  1457. 0.01756 0.61803 moveto
  1458. 0.03006 0.61803 lineto
  1459. stroke
  1460. 0 setgray
  1461. [(1)] 0.01131 0.61803 1 0 Mshowa
  1462. 0 setgray
  1463. [()] 0.02381 0.62428 0 -1 Mshowa
  1464. grestore
  1465. grestore
  1466. 0 0 moveto
  1467. 1 0 lineto
  1468. 1 0.618034 lineto
  1469. 0 0.618034 lineto
  1470. closepath
  1471. clip
  1472. newpath
  1473. 0 setgray
  1474. gsave
  1475. 0.008 setlinewidth
  1476. 0.07143 0.44284 Mdot
  1477. 0.11905 0.31731 Mdot
  1478. 0.16667 0.22736 Mdot
  1479. 0.21429 0.16291 Mdot
  1480. 0.2619 0.11673 Mdot
  1481. 0.30952 0.08364 Mdot
  1482. 0.35714 0.05993 Mdot
  1483. 0.40476 0.04294 Mdot
  1484. 0.45238 0.03077 Mdot
  1485. 0.5 0.02205 Mdot
  1486. 0.54762 0.0158 Mdot
  1487. 0.59524 0.01132 Mdot
  1488. 0.64286 0.00811 Mdot
  1489. 0.69048 0.00581 Mdot
  1490. 0.7381 0.00416 Mdot
  1491. 0.78571 0.00298 Mdot
  1492. 0.83333 0.00214 Mdot
  1493. 0.88095 0.00153 Mdot
  1494. 0.92857 0.0011 Mdot
  1495. 0.97619 0.00079 Mdot
  1496. grestore
  1497. % End of Graphics
  1498. MathPictureEnd
  1499. :[font = text; inactive; ]
  1500. Now we'll compute the same samples using AsympUG's recursion:
  1501. :[font = input; startGroup; ]
  1502. g = N[Exp[-T/tau]];
  1503. r = 1-g
  1504. :[font = output; inactive; output; endGroup; ]
  1505. 0.2834686894262107
  1506. ;[o]
  1507. 0.283469
  1508. :[font = input; startGroup; ]
  1509. npoints = Floor[t60/T];
  1510. env = Table[0,{npoints}];
  1511. Af = 0.0;    (* Approached amplitude [experiment!] *)
  1512. env[[1]]=1.0;    (* Initial segment amplitude *)
  1513. For[n=2,n<=npoints,n=n+1,
  1514.     env[[n]] = g env[[n-1]] + r Af];
  1515. ListPlot[env,
  1516.     PlotRange->{0,Max[env[[1]],Af]},
  1517.     AxesLabel->{"time(samples)",""},
  1518.     PlotLabel->"Sampled exponential decay"];
  1519. :[font = postscript; inactive; PostScript; output; endGroup; endGroup; pictureLeft = 39; pictureWidth = 282; pictureHeight = 176; preserveAspect; ]
  1520. %!
  1521. %%Creator: Mathematica
  1522. %%AspectRatio: 0.61803 
  1523. MathPictureStart
  1524. % Scaling calculations
  1525. 0.02381 0.04762 0 0.61803 [
  1526. [(Sampled exponential decay)] 0.5 0.62428 0 -1 Msboxa
  1527. [(5)] 0.2619 -0.0125 0 1 Msboxa
  1528. [(10)] 0.5 -0.0125 0 1 Msboxa
  1529. [(15)] 0.7381 -0.0125 0 1 Msboxa
  1530. [(20)] 0.97619 -0.0125 0 1 Msboxa
  1531. [(time\(samples\))] 1.00625 0 -1 0 Msboxa
  1532. [(0.2)] 0.01131 0.12361 1 0 Msboxa
  1533. [(0.4)] 0.01131 0.24721 1 0 Msboxa
  1534. [(0.6)] 0.01131 0.37082 1 0 Msboxa
  1535. [(0.8)] 0.01131 0.49443 1 0 Msboxa
  1536. [(1)] 0.01131 0.61803 1 0 Msboxa
  1537. [()] 0.02381 0.62428 0 -1 Msboxa
  1538. [ -0.001 -0.00725 0 0 ]
  1539. [ 1.001 0.61903 0 0 ]
  1540. ] MathScale
  1541. % Start of Graphics
  1542. 1 setlinecap
  1543. 1 setlinejoin
  1544. newpath
  1545. %%Object: Graphics
  1546. [ ] 0 setdash
  1547. 0 setgray
  1548. 0 setgray
  1549. [(Sampled exponential decay)] 0.5 0.62428 0 -1 Mshowa
  1550. gsave
  1551. gsave
  1552. 0.002 setlinewidth
  1553. 0 0 moveto
  1554. 1 0 lineto
  1555. stroke
  1556. 0.2619 -0.00625 moveto
  1557. 0.2619 0.00625 lineto
  1558. stroke
  1559. 0 setgray
  1560. [(5)] 0.2619 -0.0125 0 1 Mshowa
  1561. 0.5 -0.00625 moveto
  1562. 0.5 0.00625 lineto
  1563. stroke
  1564. 0 setgray
  1565. [(10)] 0.5 -0.0125 0 1 Mshowa
  1566. 0.7381 -0.00625 moveto
  1567. 0.7381 0.00625 lineto
  1568. stroke
  1569. 0 setgray
  1570. [(15)] 0.7381 -0.0125 0 1 Mshowa
  1571. 0.97619 -0.00625 moveto
  1572. 0.97619 0.00625 lineto
  1573. stroke
  1574. 0 setgray
  1575. [(20)] 0.97619 -0.0125 0 1 Mshowa
  1576. 0 setgray
  1577. [(time\(samples\))] 1.00625 0 -1 0 Mshowa
  1578. 0.02381 0 moveto
  1579. 0.02381 0.61803 lineto
  1580. stroke
  1581. 0.01756 0.12361 moveto
  1582. 0.03006 0.12361 lineto
  1583. stroke
  1584. 0 setgray
  1585. [(0.2)] 0.01131 0.12361 1 0 Mshowa
  1586. 0.01756 0.24721 moveto
  1587. 0.03006 0.24721 lineto
  1588. stroke
  1589. 0 setgray
  1590. [(0.4)] 0.01131 0.24721 1 0 Mshowa
  1591. 0.01756 0.37082 moveto
  1592. 0.03006 0.37082 lineto
  1593. stroke
  1594. 0 setgray
  1595. [(0.6)] 0.01131 0.37082 1 0 Mshowa
  1596. 0.01756 0.49443 moveto
  1597. 0.03006 0.49443 lineto
  1598. stroke
  1599. 0 setgray
  1600. [(0.8)] 0.01131 0.49443 1 0 Mshowa
  1601. 0.01756 0.61803 moveto
  1602. 0.03006 0.61803 lineto
  1603. stroke
  1604. 0 setgray
  1605. [(1)] 0.01131 0.61803 1 0 Mshowa
  1606. 0 setgray
  1607. [()] 0.02381 0.62428 0 -1 Mshowa
  1608. grestore
  1609. grestore
  1610. 0 0 moveto
  1611. 1 0 lineto
  1612. 1 0.618034 lineto
  1613. 0 0.618034 lineto
  1614. closepath
  1615. clip
  1616. newpath
  1617. 0 setgray
  1618. gsave
  1619. 0.008 setlinewidth
  1620. 0.07143 0.61803 Mdot
  1621. 0.11905 0.44284 Mdot
  1622. 0.16667 0.31731 Mdot
  1623. 0.21429 0.22736 Mdot
  1624. 0.2619 0.16291 Mdot
  1625. 0.30952 0.11673 Mdot
  1626. 0.35714 0.08364 Mdot
  1627. 0.40476 0.05993 Mdot
  1628. 0.45238 0.04294 Mdot
  1629. 0.5 0.03077 Mdot
  1630. 0.54762 0.02205 Mdot
  1631. 0.59524 0.0158 Mdot
  1632. 0.64286 0.01132 Mdot
  1633. 0.69048 0.00811 Mdot
  1634. 0.7381 0.00581 Mdot
  1635. 0.78571 0.00416 Mdot
  1636. 0.83333 0.00298 Mdot
  1637. 0.88095 0.00214 Mdot
  1638. 0.92857 0.00153 Mdot
  1639. 0.97619 0.0011 Mdot
  1640. grestore
  1641. % End of Graphics
  1642. MathPictureEnd
  1643. ^*)